package phoenix.web.test_objects;

import org.testng.TestException;

import phoenix.core.PhoenixManager;
import phoenix.core.base.extensions.TestBaseWebExt;

/**
 * Class contains test methods for MainMenu
 */
public class MainMenuTests extends TestBaseWebExt
{
	public MainMenuTests(PhoenixManager p_phoenix)
	{
		super(p_phoenix);
	}

	/**
	 * User menu test
	 */
	public void userMenuTest()
	{
		try
		{
			wd().openAutologin(testUser());
			page().searchPage().closeAllPopUps();

			this.userMenuMyAccountTest();
			this.userMenuMyProfileTest();

			if (manager.isBN() || manager.isWB() || manager.isFlirt())
			{
				this.userMenuBlockedTest();
			}

			this.userMenuContactUsTest();
			this.userMenuLogoutTest();
		}
		catch (Exception p_ex)
		{
			log().errorAndScreen("userMenuTest: " + p_ex.toString());
		}
		finally
		{
			test().forErrors();
		}
	}

	public void userMenuLogoutTest()
	{
		page().menuPage().clickMainMenu();
		wd().wait(2);

		if (!page().menuPage().isMainMenuPresent())
		{
			throw new TestException("Unable to open main menu");
		}

		page().menuPage().clickLogout();
		page().searchPage().closeAllPopUps();
		page().indexPage().waitForPageLoad();
		wd().wait(2);

		if (manager.isNF())
		{
			wd().isUrlEnds("/#", true);
		}
		else
		{
			wd().isUrlEnds("/", true);
		}
	}

	public void userMenuContactUsTest()
	{
		page().menuPage().clickMainMenu();
		wd().wait(2);

		if (!page().menuPage().isMainMenuPresent())
		{
			throw new TestException("Unable to open main menu");
		}

		page().menuPage().clickContactUs();
		page().contactUsPage().waitForPageLoad();
		wd().wait(2);
		wd().isUrlEnds("/contactUs", true);
	}

	public void userMenuBlockedTest()
	{
		page().menuPage().clickMainMenu();
		wd().wait(2);

		if (!page().menuPage().isMainMenuPresent())
		{
			throw new TestException("Unable to open main menu");
		}

		page().menuPage().clickBlocked();
		page().blockedPage().waitForPageLoad();
		wd().wait(2);
		wd().isUrlEnds("/blocked", true);
	}

	public void userMenuMyProfileTest()
	{
		page().menuPage().clickMainMenu();
		wd().wait(2);

		if (!page().menuPage().isMainMenuPresent())
		{
			throw new TestException("Unable to open main menu");
		}

		page().menuPage().clickMyProfile();
		page().myProfilePage().waitForPageLoad();
		wd().wait(2);
		wd().isUrlEnds("/profile", true);
	}

	public void userMenuMyAccountTest()
	{
		page().menuPage().clickMainMenu();
		wd().wait(2);

		if (!page().menuPage().isMainMenuPresent())
		{
			throw new TestException("Unable to open main menu");
		}

		page().menuPage().clickMyAccount();
		page().myAccountPage().waitForPageLoad();
		wd().wait(2);
		wd().isUrlEnds("/account", true);
		page().searchPage().closeAllPopUps();
	}

	/**
	 * Search menu tests
	 */
	public void searchMenuTest()
	{
		try
		{
			wd().openAutologin(testUser());
			wd().openPage("/search");
			page().searchPage().closeAllPopUps();

			this.searchMenuSearchOnlineTest();
			this.searchMenuPhotoQualityTest();
			this.searchMenuNewMembersTest();
		}
		catch (Exception p_ex)
		{
			log().errorAndScreen("searchMenuTest: " + p_ex.toString());
		}
		finally
		{
			test().forErrors();
		}
	}

	public void searchMenuNewMembersTest()
	{
		if (manager.isNF() || manager.isMD())
		{
			page().menuPage().clickSearchNavigationMenu();
			wd().wait(2);
		}

		page().menuPage().clickNewMembers();

		if (manager.isMD())
		{
			wd().wait(2);
			page().menuPage().clickSearchSubmit();
		}

		page().searchPage().waitForPageLoad();
		wd().wait(2);
		wd().isUrlContains("type:new_members", true);
	}

	public void searchMenuPhotoQualityTest()
	{
		if (manager.isNF() || manager.isMD())
		{
			page().menuPage().clickSearchNavigationMenu();
			wd().wait(2);
		}

		page().menuPage().clickPhotoQuality();

		if (manager.isMD())
		{
			wd().wait(2);
			page().menuPage().clickSearchSubmit();
		}

		page().searchPage().waitForPageLoad();
		wd().wait(2);
		wd().isUrlContains("type:near_you", true);
	}

	public void searchMenuSearchOnlineTest()
	{
		if (manager.isNF() || manager.isMD())
		{
			page().menuPage().clickSearchNavigationMenu();
			wd().wait(2);
		}

		page().menuPage().clickSearchOnline();

		if (manager.isMD())
		{
			wd().wait(2);
			page().menuPage().clickSearchSubmit();
		}

		page().searchPage().waitForPageLoad();
		wd().wait(2);
		wd().isUrlContains("type:online", true);
	}

	/**
	 * Activity menu tests
	 */
	public void activityMenuTest()
	{
		try
		{
			wd().openAutologin(testUser());
			wd().openPage("/newsFeed");
			page().searchPage().closeAllPopUps();

			this.activityMenuViewsTest();
			this.activityMenuWinksTest();
			this.activityMenuFeedTest();

			if (manager.isBN() || manager.isWB())
			{
				this.activityMenuSmsChatTest();
			}

			if (manager.isNF())
			{
				this.activityMenuMessengerTest();
				this.activityMenuFriendsTest();
			}
		}
		catch (Exception p_ex)
		{
			log().errorAndScreen("activityMenuTests: " + p_ex.toString());
		}
		finally
		{
			test().forErrors();
		}
	}

	public void activityMenuSmsChatTest()
	{
		page().menuPage().clickSmsChat();
		page().searchPage().waitForPageLoad();
		wd().wait(2);
		wd().isUrlEnds("/smsChatFeed", true);
	}

	public void activityMenuFeedTest()
	{
		if (manager.isNF())
		{
			page().menuPage().clickActivityNavigationMenu();
			wd().wait(2);
		}

		page().menuPage().clickFeed();
		page().searchPage().waitForPageLoad();
		wd().wait(2);
		wd().isUrlEnds("/newsFeed", true);
	}

	public void activityMenuWinksTest()
	{
		if (manager.isNF())
		{
			page().menuPage().clickActivityNavigationMenu();
			wd().wait(2);
		}

		page().menuPage().clickWinks();
		page().searchPage().waitForPageLoad();
		wd().wait(2);
		wd().isUrlEnds("/winks", true);
	}

	public void activityMenuViewsTest()
	{
		if (manager.isNF())
		{
			page().menuPage().clickActivityNavigationMenu();
			wd().wait(2);
		}

		page().menuPage().clickViews();
		page().searchPage().waitForPageLoad();
		wd().wait(2);
		wd().isUrlEnds("/views", true);
	}

	public void activityMenuMessengerTest()
	{
		if (manager.isNF())
		{
			page().menuPage().clickActivityNavigationMenu();
			wd().wait(2);
		}

		page().menuPage().clickMessenger();
		page().searchPage().waitForPageLoad();
		wd().wait(2);
		wd().isUrlEnds("/messenger", true);
	}

	public void activityMenuFriendsTest()
	{
		if (manager.isNF())
		{
			page().menuPage().clickActivityNavigationMenu();
			wd().wait(2);
		}

		page().menuPage().clickFriends();
		page().searchPage().waitForPageLoad();
		wd().wait(2);
		wd().isUrlEnds("/favorites", true);
	}

	/**
	 * Top menu tests
	 */
	public void topMenuTest()
	{
		try
		{

			this.topMenuSearchTest();
			this.topMenuFeedTest();

			if (manager.isBN() || manager.isWB())
			{
				this.topMenuActivityTest();
			}

			if (manager.isBN() || manager.isWB() || manager.isFlirt())
			{
				this.topMenuSmsChatTest();
			}

			if (manager.isFlirt() || manager.isNF() || manager.isMD())
			{
				this.topMenuFriendsTest();
				this.topMenuViewsTest();
				this.topMenuWinksTest();
				this.topMenuChatroomsTest();
			}
		}
		catch (Exception p_ex)
		{
			log().errorAndScreen("topMenuTest: " + p_ex.toString());
		}
		finally
		{
			test().forErrors();
		}
	}

	public void topMenuSearchTest()
	{
		try
		{
			wd().openAutologin(testUser());
			page().searchPage().waitForPageLoad();
			page().searchPage().closeAllPopUps();
			page().menuPage().clickTopMenuSearch();
			page().searchPage().waitForPageLoad();
			wd().wait(2);
			wd().isUrlEnds("/search", true);
		}
		catch (Exception p_ex)
		{
			log().errorAndScreen("topMenuSearchTest " + p_ex);
		}
	}

	public void topMenuActivityTest()
	{
		try
		{
			wd().openAutologin(testUser());
			page().searchPage().waitForPageLoad();
			page().searchPage().closeAllPopUps();
			page().menuPage().clickTopMenuActivity();
			wd().wait(2);

			if (page().menuPage().isActivityDropDownDisplayed())
			{
				page().menuPage().clickActivityDropDownLink();
			}

			page().searchPage().waitForPageLoad();
			wd().wait(2);
			wd().isUrlEnds("/views", true);
		}
		catch (Exception p_ex)
		{
			log().errorAndScreen("topMenuActivityTest " + p_ex.toString());
		}
	}

	public void topMenuFeedTest()
	{
		try
		{
			wd().openAutologin(testUser());
			page().searchPage().waitForPageLoad();
			page().searchPage().closeAllPopUps();

			if (manager.isNF())
			{
				page().menuPage().waitForPageLoad();

				if (page().menuPage().isTopFeedCounterActivePresent())
				{
					page().menuPage().clickTopFeedCounterActive();
					wd().wait(2);
				}
				else
				{
					page().menuPage().clickTopMenuFeed();
					wd().wait(2);
				}
			}
			else
			{
				page().menuPage().clickTopMenuFeed();
				wd().wait(2);
			}

			if (page().menuPage().isFeedDropDownDisplayed())
			{
				page().menuPage().clickFeedDropDownLink();
			}

			page().searchPage().waitForPageLoad();
			wd().wait(2);
			wd().isUrlEnds("/newsFeed", true);
		}
		catch (Exception p_ex)
		{
			log().errorAndScreen("topMenuFeedTest " + p_ex);
		}
	}

	public void topMenuChatroomsTest()
	{
		try
		{
			wd().openAutologin(testUser());
			page().searchPage().waitForPageLoad();
			page().searchPage().closeAllPopUps();
			page().menuPage().clickTopMenuChatRooms();
			page().chatRoomsPage().waitForPageLoad();
			wd().wait(2);
			wd().isUrlEnds("/rooms", true);
		}
		catch (Exception p_ex)
		{
			log().errorAndScreen("topMenuChatroomsTest " + p_ex);
		}
	}

	public void topMenuFriendsTest()
	{
		wd().openAutologin(testUser());
		page().searchPage().waitForPageLoad();
		page().searchPage().closeAllPopUps();
		if (manager.isNF())
		{
			page().menuPage().waitForPageLoad();

			if (page().menuPage().isTopMyFriendsCounterActivePresent())
			{
				page().menuPage().clickTopMyFriendsCounterActive();
				wd().wait(2);
			}
			else
			{
				page().menuPage().clickTopMenuMyFriends();
				wd().wait(2);
			}
		}
		else
		{
			page().menuPage().clickTopMenuMyFriends();
			wd().wait(2);
		}
		if (page().menuPage().isFriendsDropDownDisplayed())
		{
			page().menuPage().clickFriendsDropDownLink();
		}

		page().searchPage().waitForPageLoad();
		wd().wait(2);
		wd().isUrlEnds("/favorites", true);
		page().searchPage().closeAllPopUps();
	}

	public void topMenuViewsTest()
	{
		try
		{
			wd().openAutologin(testUser());
			page().searchPage().waitForPageLoad();
			page().searchPage().closeAllPopUps();
			if (manager.isNF())
			{
				page().menuPage().waitForPageLoad();

				if (page().menuPage().isTopBrowsedMeCounterActivePresent())
				{
					page().menuPage().clickTopBrowsedMeCounterActiveActive();
					wd().wait(2);
				}
				else
				{
					page().menuPage().clickTopMenuBrowsedMe();
					wd().wait(2);
				}
			}
			else
			{
				page().menuPage().clickTopMenuBrowsedMe();
				wd().wait(2);
			}

			if (page().menuPage().isViewsDropDownDisplayed())
			{
				page().menuPage().clickViewsDropDownLink();
			}

			page().searchPage().waitForPageLoad();
			wd().wait(2);
			wd().isUrlEnds("/views", true);
		}
		catch (Exception p_ex)
		{
			log().errorAndScreen("topMenuViewsTest " + p_ex.toString());
		}
	}

	public void topMenuWinksTest()
	{
		try
		{
			wd().openAutologin(testUser());
			page().searchPage().waitForPageLoad();
			page().searchPage().closeAllPopUps();
			if (manager.isNF())
			{
				page().menuPage().waitForPageLoad();

				if (page().menuPage().isTopWinkedMeCounterActivePresent())
				{
					page().menuPage().clickTopWinkedMeCounterActive();
					wd().wait(2);
				}
				else
				{
					page().menuPage().clickTopMenuWinkedMe();
					wd().wait(2);
				}
			}
			else
			{
				page().menuPage().clickTopMenuWinkedMe();
				wd().wait(2);
			}

			if (page().menuPage().isWinksDropDownDisplayed())
			{
				page().menuPage().clickWinksDropDownLink();
			}

			page().searchPage().waitForPageLoad();
			wd().wait(2);
			wd().isUrlEnds("/winks", true);
		}
		catch (Exception p_ex)
		{
			log().errorAndScreen("topMenuWinksTest " + p_ex.toString());
		}
	}

	/**
	 * Left navigation bar test for BN, WB
	 */
	public void leftNavigationBarTest()
	{
		try
		{
			wd().openAutologin(testUser());
			page().searchPage().waitForPageLoad();
			page().searchPage().closeAllPopUps();

			this.leftNavigationBarFriendsTest();
			this.leftNavigationBarActivityTest();
			this.leftNavigationBarFeedTest();
			this.leftNavigationBarChatRoomsTest();
			this.leftNavigationBarForumTest();
		}
		catch (Exception p_ex)
		{
			log().errorAndScreen("leftNavigationBarTest: " + p_ex.toString());
		}
		finally
		{
			test().forErrors();
		}
	}

	public void leftNavigationBarFriendsTest()
	{
		page().menuPage().clickAcitivityNavigation();
		wd().wait(2);

		if (!page().menuPage().isAcitivityNavigationDisplayed())
		{
			throw new TestException("Can't find navigation bar for activity");
		}

		page().menuPage().clickLeftBarFriends();
		page().searchPage().waitForPageLoad();
		wd().wait(2);
		wd().isUrlEnds("/favorites", true);
	}

	public void leftNavigationBarForumTest()
	{
		if (manager.isWB())
		{
			// No forum on WB
			return;
		}
		// Forum
		page().menuPage().clickAcitivityNavigation();
		wd().wait(2);

		if (!page().menuPage().isAcitivityNavigationDisplayed())
		{
			throw new TestException("Can't find navigation bar for activity");
		}

		page().menuPage().clickLeftBarForum();
		page().forumPage().waitForPageLoad();
		wd().wait(2);
		wd().isUrlEnds("/forum", true);
	}

	public void leftNavigationBarChatRoomsTest()
	{
		page().menuPage().clickAcitivityNavigation();
		wd().wait(2);

		if (!page().menuPage().isAcitivityNavigationDisplayed())
		{
			throw new TestException("Can't find navigation bar for activity");
		}

		page().menuPage().clickLeftBarChatRooms();
		page().chatRoomsPage().waitForPageLoad();
		wd().wait(2);
		wd().isUrlEnds("/rooms", true);
	}

	public void leftNavigationBarFeedTest()
	{
		page().menuPage().clickAcitivityNavigation();
		wd().wait(2);

		if (!page().menuPage().isAcitivityNavigationDisplayed())
		{
			throw new TestException("Can't find navigation bar for activity");
		}

		page().menuPage().clickLeftBarFeed();
		page().searchPage().waitForPageLoad();
		wd().wait(2);
		wd().isUrlEnds("/newsFeed", true);
	}

	public void leftNavigationBarActivityTest()
	{
		page().menuPage().clickAcitivityNavigation();
		wd().wait(2);

		if (!page().menuPage().isAcitivityNavigationDisplayed())
		{
			throw new TestException("Can't find navigation bar for activity");
		}

		page().menuPage().clickLeftBarActivity();
		page().searchPage().waitForPageLoad();
		wd().wait(2);
		wd().isUrlEnds("/views", true);
	}

	public void topMenuSmsChatTest()
	{
		try
		{
			wd().openAutologin(testUser());
			page().searchPage().waitForPageLoad();
			page().searchPage().closeAllPopUps();
			page().menuPage().clickTopMenuSMSChat();
			page().searchPage().waitForPageLoad();
			wd().wait(2);
			wd().isUrlEnds("/smsChatFeed", true);
		}
		catch (Exception p_ex)
		{
			log().errorAndScreen("topMenuSmsChatTest " + p_ex.toString());
		}
	}
}
